package com.czp.framework.filter;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


/**
 *
 * 【描 述】：会话期失效过滤器
 * 【环 境】：J2SE 1.7
 * 
 * @author   柴志鹏
 * @version  version 1.0
 * @since    2014-5-4
 */
public class ConversationFilter implements Filter {

	/**
	 * 【重载方法】
	 * 【描 述】：在容器删除Filter实例之前，调用该方法(只会执行一次)。
	 * @see javax.servlet.Filter#destroy()
	 */
	public void destroy() {
	}

	/**
	 * 【重载方法】
	 * 【描 述】：
	 * 		当请求达到容器，容器会调用doFilter方法。
	 * 		容器会将事先创建好的request，response对象作为
	 * 		参数传递进去。
	 * 		FilterChain：过滤器链。
	 * 		如果调用了FilterChain.doFilter方法，表示调用
	 * 		后续的过滤器，如果没有过滤器，则调用对应的web组件。
	 * @param req
	 * @param res
	 * @param chain
	 * @throws IOException
	 * @throws ServletException
	 * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
	 */
	public void doFilter(ServletRequest req, ServletResponse res,
			FilterChain chain) throws IOException, ServletException {
		HttpServletRequest request = (HttpServletRequest) req;
		HttpServletResponse response = (HttpServletResponse) res;
		String requestUrl = request.getRequestURL().toString();
        String contextPath = request.getContextPath();
        if(requestUrl.indexOf("login.jsp") == -1
        	&& requestUrl.indexOf("login.do") == -1) {
        	Object userSession = request.getSession().getAttribute("userId");
        	if(userSession == null) {
            	//response.sendRedirect(contextPath + "/login.jsp");
        		response.setContentType("text/html;charset=utf-8");
        		//解决在iframe中跳转
                PrintWriter out = response.getWriter();
                out.println("<html>");  
                out.println("<script type=\"text/javascript\">");  
                out.println("alert('未登录系统或登录超时，请重新登录!');");
                out.println("window.open ('"+contextPath+"/login.jsp','_top');");  
                out.println("</script>");  
                out.println("</html>");
            	return;
            }
        }
        chain.doFilter(request, response);
	}

	/**
	 * 【重载方法】
	 * 【描 述】：
	 * 		servlet容器在创建好Filter实例之后，会立即调用
	 * 		init()方法。容器会创建FilterConfig实例，
	 * 		通过该示例，可以方法Filter的初始化参数。
	 * 		String FilterConfig.getInitParameter(String paraName);
	 * 		init()方法只会执行一次。
	 * @param config
	 * @throws ServletException
	 * @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
	 */
	public void init(FilterConfig config) throws ServletException {
	}

}
